﻿using System;
using System.Threading;

// 定义闹钟类
public class AlarmClock
{
    // 定义嘀嗒事件的委托类型
    public delegate void TickEventHandler(object sender, EventArgs e);
    // 定义响铃事件的委托类型
    public delegate void AlarmEventHandler(object sender, EventArgs e);

    // 定义嘀嗒事件
    public event TickEventHandler Tick;
    // 定义响铃事件
    public event AlarmEventHandler Alarm;

    private int interval; // 嘀嗒间隔时间（毫秒）
    private int duration; // 运行总时长（毫秒）

    public AlarmClock(int interval, int duration)
    {
        this.interval = interval;
        this.duration = duration;
    }

    // 启动闹钟的方法
    public void Start()
    {
        int elapsedTime = 0;
        while (elapsedTime < duration)
        {
            // 触发嘀嗒事件
            OnTick();
            Thread.Sleep(interval);
            elapsedTime += interval;
        }
        // 触发响铃事件
        OnAlarm();
    }

    // 触发嘀嗒事件的方法
    protected virtual void OnTick()
    {
        Tick?.Invoke(this, EventArgs.Empty);
    }

    // 触发响铃事件的方法
    protected virtual void OnAlarm()
    {
        Alarm?.Invoke(this, EventArgs.Empty);
    }
}

class Program
{
    static void Main()
    {
        // 创建一个闹钟实例，嘀嗒间隔为 1000 毫秒（即 1 秒），运行总时长为 5000 毫秒（即 5 秒）
        AlarmClock clock = new AlarmClock(1000, 5000);

        // 订阅嘀嗒事件
        clock.Tick += (sender, e) =>
        {
            Console.WriteLine("Tick...");
        };

        // 订阅响铃事件
        clock.Alarm += (sender, e) =>
        {
            Console.WriteLine("Alarm!!!");
        };

        // 启动闹钟
        clock.Start();
    }
}